// 头文件包含了函数声明，宏定义，结构体声明，变量声明。
// 比如stdio.h系统头文件包含了printf，scanf, fopen函数
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>

// 第1优先级：各种括号，如()、[]等、成员运算符 . ；
// 第2优先级：所有单目运算符，如++(自加)、--(自减)、!(非)、~(位非)等；
// 第3优先级：乘法运算符*、除法运算符/、求余运算符%；
// 第4优先级：加法运算符+、减法运算符-；
// 第5优先级：移位运算符<<、>>；
// 第6优先级：大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=；
// 第7优先级：等于运算符==、不等于运算符!=；
// 第8优先级：按位与运算符&；
// 第9优先级：按位异或运算符^；
// 第10优先级：按位或运算符|；
// 第11优先级：逻辑与运算符&&；
// 第12优先级：逻辑或运算符||；
// 第13优先级：三目条件运算符 ?: ；
// 第14优先级：各种赋值运算符，如=、+=、-=、*=、/= 等；
// 第15优先级：逗号运算, 。

// int main(void)也是可以的
int main(int argc, char **argv)
{
    // ,用法
    char valueA;
    // 位移
    // 听说有些环境，位移后末尾补1！
    printf("[%s,%d]test << >> operation================>\n", __FILE__, __LINE__);
    valueA = 0x81;// 0b10000001
    // 0b10000001十进制是-127
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b10000001
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, (unsigned char)valueA);// 0b10000001
    valueA = valueA << 1;
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b00000010
    valueA <<= 1;
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b00000100

    valueA = 0x11;// 0b00010001
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b00010001
    valueA = valueA >> 1;
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b00001000
    valueA >>= 1;
    printf("[%s,%d]value=0x%x\n", __FILE__, __LINE__, valueA);// 0b00000100

    //因为返回类型是int，因此return 整数;
    return 1;
}
// 输出：
//  ./test a b c
//  hello world!
